package com.fhz.roomtest

import androidx.annotation.NonNull
import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase


/**
 * 时间:2023/3/27
 * @author Mr.Feng
 * 简述: 记住每次更改实体类的时候.
 * 1,更改 版本号.
 * 2,更改entities中的class
 * 3, 添加Dao
 * 4, 在创建数据的方发时调用Migration 方法.
 *
 *  以上是保留源数据的升级操作.
 *  如果是测试数据,可以直接调用 fallbackToDestructiveMigration()
 *  此方法是删除所有数据,从新创建表.不保留数据.
 */
@Database(entities = [User::class,Student::class], version = 3, exportSchema = true)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
    abstract fun studentDao(): StudentDao

    companion object{
         val MIGRATION_2_3: Migration = object : Migration(2,3) {
            override fun migrate(@NonNull database: SupportSQLiteDatabase) {
                //执行升级相关操作
                //删除表
//                    database.execSQL("drop table `student` ")
                //添加一个新类,也就是一个新表的时候的操作.记住要和实体类的类型一样.
//                    database.execSQL("CREATE TABLE `student` (`uid` INTEGER, " +
//                        "`sName` TEXT, " +
//                        "`sAddress` TEXT," +
//                        "PRIMARY KEY(`uid`))")
                //跟现在的表添加一个字段
//                database.execSQL("ALTER TABLE user ADD COLUMN address TEXT")

            }
        }
    }

}

